home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 201-225 / disk_222 / plplot / src / source.zoo / plccal.c < prev    next >
C/C++ Source or Header  |  1989-05-15  |  1KB  |  40 lines

  1. /* Subroutine to interpolate the position of a contour which is known */
  2. /* to be next to ix,iy in the direction ixg,iyg. The unscaled distance */
  3. /* along ixg,iyg is returned as dist */
  4.  
  5. #include "plplot.h"
  6.  
  7. void plccal(pts,nx,ny,zlev,ix,iy,ixg,iyg,dist)
  8. int nx,ny,ix,iy,ixg,iyg;
  9. float *pts,zlev,*dist;
  10. {
  11.       int ia,ib;
  12.       float dbot, dtop, pmid, qmid, zmid;
  13.  
  14.       ia = ix+ixg;
  15.       ib = iy+iyg;
  16.       if (ixg == 0 || iyg == 0) {
  17.         dtop = zlev - *(pts+(ix-1)*ny+iy-1);
  18.         dbot = *(pts+(ia-1)*ny+ib-1) - *(pts+(ix-1)*ny+iy-1);
  19.         *dist = 0.0;
  20.         if (dbot != 0.0) *dist = dtop/dbot;
  21.       }
  22.       else {
  23.         pmid = *(pts+(ix-1)*ny+iy-1) + *(pts+(ia-1)*ny+ib-1);
  24.         qmid = *(pts+(ix-1)*ny+ib-1) + *(pts+(ia-1)*ny+iy-1);
  25.         zmid = (pmid+qmid)/4.0;
  26.         if (zmid >= zlev) {
  27.           dtop = zlev - *(pts+(ix-1)*ny+iy-1);
  28.           dbot = zmid - *(pts+(ix-1)*ny+iy-1);
  29.           *dist = 0.0;
  30.           if (dbot != 0.0) *dist = 0.5*dtop/dbot;
  31.         }
  32.         else {
  33.           dtop = zlev-zmid;
  34.           dbot = *(pts+(ia-1)*ny+ib-1) - zmid;
  35.           *dist = 0.5;
  36.           if (dbot != 0.0) *dist = 0.5 + 0.5*dtop/dbot;
  37.         }
  38.       }
  39. }
  40.